<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.global.js"></script>
</head>
<body>
    <div id="app">
        
    </div>
</body>
<script>
    let {createApp,nextTick,getCurrentInstance} = Vue;
    let {ref,reactive,readonly,computed,watch} = Vue;
    let {isRef,isReactive,isProxy,isReadonly} = Vue;
    let {shallowRef,shallowReactive,shallowReadonly,triggerRef} = Vue;

    // ifRef()   检查某个值是否为 ref。
    // isReactive()  检查一个对象是否是由 reactive() 或 shallowReactive() 创建的代理。
    // isReadonly()  检查传入的值是否为只读对象。只读对象的属性可以更改，但他们不能通过传入的对象直接赋值。
    //               通过 readonly() 和 shallowReadonly() 创建的代理都是只读的，因为他们是没有 set 函数的 computed() ref。
    // isProxy()    检查一个对象是否是由 reactive()、readonly()、shallowReactive() 或 shallowReadonly() 创建的代理。

    var app = createApp({
        
        setup(props) {

            let count = ref(100)
            let doubleCount = computed(()=>{
                return count.value * 2;
            })
            console.log(doubleCount);

            let zhang = reactive({
                name:"张三",
                age:18,
                info:{
                    height:173,
                    weight:65
                }
            });  

            let li = shallowReadonly({
                name:"李四",
                age:18,
                info:{
                    height:173,
                    weight:65
                }
            });  

            // readonly 返回一个原值的只读代理(Proxy对象)
            count = readonly(count);
            zhang = readonly(zhang);

            console.log("isProxy",isProxy(count));
            console.log("isProxy",isProxy(doubleCount));  // !!  true
            console.log("isProxy",isProxy(zhang));
            console.log("isProxy",isProxy(li));

            return {
                zhang,
            }
            
        },
        mounted() {
            // console.log("this",this);
        },
        watch:{
            // "zhang":function(){},
            // "zhang.age":function(){},
        }
        
    })

    app.mount("#app");




    // 得到一个原值的只读代理
    var proxy = new Proxy({a:1,b:2},{
        get(target,key){
            return target[key];
        },
        set(){
            return false;
        }
    })




</script>
</html>